<!doctype html>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="../assert_selection.js"></script>
<script>
function undoTest(behavior) {
  if (window.internals)
    internals.settings.setEditingBehavior(behavior);
  test(() => assert_selection(
    [
      '<div contenteditable>',
        'This word| should be selected only on mac.',
      '</div>'
    ].join(''),
    selection => {
      for (let i = 0; i < 4; ++i)
        selection.document.execCommand('delete');
      selection.document.execCommand('undo');
    },
    [
      '<div contenteditable>',
        behavior === 'mac'
            ? 'This |word^ should be selected only on mac.'
            : 'This word| should be selected only on mac.',
      '</div>',
    ].join('')),
    `${behavior}: backward delete`);

  test(() => assert_selection(
    [
      '<div contenteditable>',
        'This |word should be selected only on mac.',
      '</div>'
    ].join(''),
    selection => {
      for (let i = 0; i < 4; ++i)
        selection.document.execCommand('forwardDelete');
      selection.document.execCommand('undo');
    },
    [
      '<div contenteditable>',
        behavior === 'mac'
            ? 'This ^word| should be selected only on mac.'
            : 'This |word should be selected only on mac.',
      '</div>',
    ].join('')),
    `${behavior}: forward delete`);

  test(() => assert_selection(
    [
      '<div contenteditable>',
        'This wo|rd should be selected only on mac.',
      '</div>'
    ].join(''),
    selection => {
      for (let i = 0; i < 2; ++i)
        selection.document.execCommand('delete');
      for (let i = 0; i < 2; ++i)
        selection.document.execCommand('forwardDelete');
      selection.document.execCommand('undo');
    },
    [
      '<div contenteditable>',
        behavior === 'mac'
            ? 'This ^word| should be selected only on mac.'
            : 'This wo|rd should be selected only on mac.',
      '</div>',
    ].join('')),
    `${behavior}: backward and forward delete`);
}
for (let behavior of ['android', 'mac', 'unix', 'win'])
  undoTest(behavior);
</script>
